iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

C again系列 第 3

YARV Interpreter 的 main()

  • 分享至 

  • xImage
  •  

如同 C spec (參考 C11 5.1.2.2.1 Program startup),YARV 的 entry 是 main.c 的 main(),長得很單純:

int
main(int argc, char **argv)
{
#ifdef ...

    ruby_sysinit(&argc, &argv);
    return rb_main(argc, argv);
}

執行 ruby 指令建立 process 時 main() 會先被呼叫 (TODO: 寫個 C helloworld 看 compile 出的 ELF CODE 長什麼樣,如何在 startup 呼叫 main())。

ruby_sysinit() 看起來與執行 ruby 程式沒有直接關係 (複製一份 argc argv 到 origarg,操作 file descriptors),所以主要 interpreter 功能實作會在 rb_main()

rb_main() 裡面可以看到常聽到的 stack, context, node。我們寫的 ruby 程式,應該是被轉換成 node,對應到 YARV 的 instruction 然後執行。


上一篇
Interpreter process
下一篇
AST nodes
系列文
C again30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言